package com.xwj.java8.test;

import java.util.stream.Stream;

/**
 * @author xwj
 * @date 2021/4/23 14:47
 * description:
 */
public class StreamTest2 {

    public static void main(String[] args) {
        //1. Reduce 主要作用是把 Stream 元素组合起来，它提供一个起始值，然后依照运算规则（BinaryOperator）和前面的第一个、第二个、第 n 个元素组合，
        // 字符串拼接、数值的 sum、min、max、average 都是特殊的 reduce

        //字符串连接，concat = ”ABCD”
        String concat = Stream.of("A", "B", "C", "D").reduce("", String::concat);
        System.out.println("concat " + concat);

        //求最小值，minValue
        double minValue = Stream.of(-1.5, 1.0, -3.0, -2.0).reduce(Double.MAX_VALUE, Double::min);
        System.out.println("minValue " + minValue);

        //求和，sumValue = 10,有起始值
        int sumValue = Stream.of(1, 2, 3, 4).reduce(0, Integer::sum);
        System.out.println(sumValue);

        //求和，sumValue = 10,无起始值
        sumValue = Stream.of(1, 2, 3, 4).reduce(Integer::sum).get();
        System.out.println(sumValue);

        //过滤，字符串连接，concat = ace
        concat = Stream.of("a", "B", "c", "D", "e", "F")
                .filter(x -> x.compareTo("Z") > 0)
                .reduce("", String::concat);
        System.out.println(concat);
    }

}
